//
// Created by chizuru on 2025/9/3.
//

#pragma once
#include <memory>
#include "CameraController.h"

class TinyXmlRegisterCLBMap;
class BOBCATCameraService: public CameraController{
public:
    explicit BOBCATCameraService(CameraDevice& c, std::shared_ptr<TinyXmlRegisterCLBMap> rm, RetryPolicy rp = {});

    ~BOBCATCameraService();

    OperationResult checkIfCameraConnected();

    // batch cmd
    OperationResult setCameraContinuesMode();

    // batch cmd
    OperationResult setCameraDoubleExposureMode();

    // batch cmd
    OperationResult setCameraExternalTriggerMode();

    // batch cmd
    OperationResult setCameraExternalControlMode();

    // batch cmd
    OperationResult setCameraFrequencyControlMode();

    OperationResult setCameraSpeed(uint32_t value);

    OperationResult setCameraBitDepth(uint32_t value);

    OperationResult setCameraGain(uint32_t value);

    OperationResult setExposureTime(uint32_t value);

    OperationResult setFrameRate(uint32_t value);

    OperationResult getCurrentMaxExposureTime(uint32_t& value);

    OperationResult getCurrentMinExposureTime(uint32_t& value);

    OperationResult setTriggerControl(uint32_t value);

    OperationResult setFrameTimeEnable(uint32_t value);

    OperationResult setExposureControlMode(uint32_t value);

    OperationResult setTriggerInputSelector(uint32_t value);

    OperationResult setTriggerEdgeSelector(uint32_t value);

    OperationResult setTriggerOverlap(uint32_t value);

    OperationResult setDebounceTimeSelector(uint32_t value);

    OperationResult getCameraType(std::string& value);

    OperationResult getSerialNumber(std::string& value);

    OperationResult getRegisterCommand(const std::string&);

    OperationResult setRegisterCommand(const std::string&, uint32_t);


private:

};

